package main

import "fmt"

/**
依赖工厂接口，我们可以通过实现工厂接口，创建多种工厂，将对象创建由一个对象负责所有具体类的实例化变成由一群子类来负责对具体类的实例化，将过程解耦

工厂模式与简单工厂模式的最大区别就是增加了一个工厂接口，使所有工厂都 依赖这个工厂接口
*/

type Factory interface {
	CreateProduct(name string) Product
}

type Product interface {
	Say()
}

type Product1 struct {
}

func (p *Product1) Say() {
	fmt.Println("1")
}

type Factory1 struct {
}

func (f *Factory1) CreateFactory(name string) Product {
	switch name {
	case "1":
		return &Product1{}
	default:
		return nil
	}
}

func main() {
	factory := &Factory1{}
	factory.CreateFactory("1").Say()
}
